package com.puge.eduservice.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.puge.eduservice.entity.EduSubject;
import com.puge.eduservice.entity.excel.SubjectData;
import com.puge.eduservice.service.EduSubjectService;
import com.puge.exceptionhandle.PuGeException;

/**
 * @author by sun
 * @date 2021/6/13.21:59
 */

public class SubjectExcelListener extends AnalysisEventListener<SubjectData> {

    /*  1，因为SubjectExcelListener  不能交给Spring进行管理 ，需要自己去new对象，不能直接注入其他对象*/
//    2，不能实现数据库操作
            /**  3，但是我们可以通过调用这个类，创建实例化对象，实现其内部的方法  */
            public EduSubjectService subjectService;
//                创建其有参和无参构造

            public SubjectExcelListener( ) {
        }
            public SubjectExcelListener(EduSubjectService eduSubjectService) {
                this.subjectService = eduSubjectService;
        }

//        读取excel内容，一行一行的进行读取
            @Override
            public void invoke(SubjectData subjectData, AnalysisContext analysisContext) {
                if (subjectData == null){
                    throw  new PuGeException(20001,"文件数据为空");
                }
                //            一行一行的读取,每次读取有两个值,第一个为一级分类,第二个值为二级分类
//                判断以及分类是否重复
                EduSubject existOneSubject = this.existOneSubject(subjectService,subjectData.getOneSubjectName());
                if (existOneSubject == null){  //没有相同一级分类，则进行添加
                    existOneSubject = new EduSubject();
                    existOneSubject.setParentId("0");
                    existOneSubject.setTitle(subjectData.getOneSubjectName());  //以及分类名称
                    subjectService.save(existOneSubject);

                }

//                获取以及分类的id值
                String pid = existOneSubject.getId();

//                添加二级分类
//                判断二级分类是否重复
                EduSubject existTwoSubject = this.existTwoSubject(subjectService, subjectData.getTwoSubjectName(), pid);
                if (existTwoSubject == null){
                    existTwoSubject = new EduSubject();
                    existTwoSubject.setParentId(pid);
                    existTwoSubject.setTitle(subjectData.getTwoSubjectName());  //二级分类名称
                    subjectService.save(existTwoSubject);
                    }
                }



//            判断一级分类不能重复添加
            private EduSubject existOneSubject (EduSubjectService subjectService,String name){
                QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
                wrapper.eq("title",name);
                wrapper.eq("parent_id","0");

                EduSubject oneSubject = subjectService.getOne(wrapper);
                return oneSubject;
            }

//          判断二级分类能不能重复添加
            private EduSubject existTwoSubject (EduSubjectService subjectService,String name,String pid){
                QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
                wrapper.eq("title",name);
                wrapper.eq("parent_id",pid);

                EduSubject twoSubject = subjectService.getOne(wrapper);
                return twoSubject;
            }


            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {

            }
}
